package com.yida.gwj.config.service;

import java.util.List;

import com.alibaba.fastjson2.JSONObject;
import com.yida.gwj.api.domain.GwjConfStep;
import com.yida.gwj.config.domain.dto.GwjConfStepConfigDTO;
import com.yida.gwj.config.domain.dto.GwjConfStepDTO;
import com.yida.gwj.config.domain.request.GwjConfStepConfigRequest;
import com.yida.gwj.config.domain.request.GwjConfStepRequest;

/**
 * 业务步骤Service接口
 *
 * @author lqq
 * @date 2022-12-14
 */
public interface IGwjConfStepService {

    /**
     * 查询业务步骤列表
     *
     * @param gcStep 业务步骤
     * @return 业务步骤集合
     */
    public List<GwjConfStep> selectGwjConfStepList(GwjConfStep gcStep);

    /**
     * 查询业务步骤列表状态
     *
     * @param status 状态
     * @return 业务步骤集合
     */
    public List<GwjConfStep> selectGwjConfStepListByStatus(String status);

    /**
     * 查询业务步骤
     *
     * @param stepId 业务步骤主键
     * @return 业务步骤
     */
    public GwjConfStep selectByGwjConfStepId(Long stepId);

    /**
     * 新增业务步骤配置关联
     *
     * @param gcStep 业务步骤配置关联
     */
    public void insertGwjConfStep(GwjConfStep gcStep);

    /**
     * 修改业务步骤
     *
     * @param gcStep 业务步骤配置关联
     */
    public void updateGwjConfStep(GwjConfStep gcStep);

    /**
     * 批量删除业务步骤
     *
     * @param stepIds 需要删除的业务步骤主键集合
     * @return 结果
     */
    public int deleteByGwjConfStepIds(Long[] stepIds);

    /**
     * 根据业务标识查询步骤ID列表
     *
     * @param flagId 业务标识ID
     * @return 业务标识集合
     */
    List<GwjConfStep> selectGwjConfStepListByFlagId(Integer flagId);

    /**
     * 查询下一个步骤
     *
     * @param flagId 业务标识ID
     * @param currentStep 当前步骤
     * @return 返回null为当前步骤已经是最后一步
     */
    GwjConfStep selectNextGwjConfStepByFlagId(Integer flagId, Long currentStep);

    /**
     * 查询上一个步骤
     *
     * @param flagId 业务标识ID
     * @param currentStep 当前步骤
     * @return 返回null为当前步骤已经是第一步
     */
    GwjConfStep selectPreviousGwjConfStepByFlagId(Integer flagId, Long currentStep);

    // ------------------------------新增功能

    /**
     * 根据步骤ID查询详情
     *
     * @param stepId 步骤ID
     * @return
     */
    public GwjConfStepDTO queryGwjConfStepByGwjConfStepId(Long stepId);

    /**
     * 根据步骤ID获取已配置信息
     *
     * @param gwjConfStepId 步骤ID
     * @return
     */
    public List<GwjConfStepConfigDTO> selectGwjConfStepConfigListByGwjConfStepId(Long gwjConfStepId);

    /**
     * 20230227
     *
     * hmh
     *
     * 新增业务步骤
     *
     * @param gwjConfStepRequest
     * @return
     */
    public int insertGwjConfStep(GwjConfStepRequest gwjConfStepRequest);

    /**
     * 20230227
     *
     * hmh
     *
     * 修改业务步骤
     *
     * @param gcStep 业务步骤配置关联
     */
    public int updateGwjConfStep(GwjConfStepRequest gwjConfStepRequest);

    /**
     * 20230224
     *
     * hmh
     *
     * 新增业务步骤配置
     *
     * @param gwjConfStepRequest 业务步骤配置请求类
     */
    public int batchInsertGwjConfStepConfigRequest(GwjConfStepConfigRequest gwjConfStepConfigRequest);

    /**
     * 20230224
     *
     * hmh
     *
     * 修改业务步骤配置
     *
     * @param gwjConfStepRequest 业务步骤配置请求类
     */
    // public int batchUpdateGwjConfStepConfigRequest(List<GwjConfStepConfigRequest> gGwjConfStepConfigRequestList);

    // ------------------------------新增功能

    /**
     * 20230418 wkz 获取最后一个步骤
     *
     * @param flagId 标识id
     * @return {@link GwjConfStep}
     */
    public GwjConfStep getFinalStep(Integer flagId);

    /**
     * 20230418 wkz 获取第一个步骤
     *
     * @param flagId 标识id
     * @return {@link GwjConfStep}
     */
    public GwjConfStep getFirstStep(Integer flagId);

    /**
     * 获取步骤信息
     *
     * @param stepId
     * @return {@link GwjConfStep}
     */
    GwjConfStep selectByConfStepId(Long stepId);

    // ------------------------------新增功能 hmh s---------------------------------
    /**
     * 判定当前步骤是否是最后一步
     * 
     * 20230712
     * 
     * @param flagId 业务ID
     * @param stepId 步骤ID
     * @return
     */
    public JSONObject checkNextStepFinish(Integer flagId, Long stepId);
    // ------------------------------新增功能 hmh e---------------------------------
}
